/*!
 *  \file       test-fft-inversa.cpp
 *  \brief      Main per testare se la FFT inversa coincide con il segnale
 *
 * Questo programma testa se la FFT inversa generata dal segnale passato da
 * commandline coincide con il segnale stesso.
 *
 *  \author     Davide Scola <S2299453@studenti.unige.it>
 *  \author		Minetti Alberto <S3064777@studenti.unige.it>
 *  \version    1.0
 *
 */

#ifdef HAVE_CONFIG_H
# include "config.h"
#endif

#include <cmath>
#include <vector>
#include "ISignalGenerator.hpp"	
#include "StaircaseSignalGenerator.cpp"
#include "InputSignal.cpp"
#include "WrapNumber.cpp"
#include "RealNumber.hpp"
#include "Fft.cpp"


using namespace std;


int
main( int argc, char *argv[] )
{
    int retValue = 0;
    bool beVerbose = false;
    Fft< RealNumber > fft( INPUT_SIZE );
    
    if( argc > 1 && string( argv[1] ) == string( "-v" ) ) {
        beVerbose = true;
        --argc; ++argv;
    }
    
    StaircaseSignalGenerator< RealNumber > generator( --argc, ++argv );
    InputSignal< RealNumber > input( INPUT_SIZE, generator );
    
    fft.compute( input );
    fft.invert();
    
    cout.precision( 12 );
    
    for( unsigned int i = 0; i < fft.size(); ++i ) {  
        if( beVerbose ) {
            cout << i << " " << fft[i].real() << " " << input[i] << endl;
        }
              
        if( fft[i] != input[i] ) {
            retValue = 1;
        }
    }
    
    return retValue;
}
